perm filename DOC1[DOC,BGB] blob sn#097093 filedate 1974-04-15 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00022 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00003 00002	~I0,0λ10JLFA
C00007 00003	~I0,0λ15FA
C00009 00004	~I0,0P1λ13FA
C00013 00005	1.7	Control, Meta, and Meta-Control Keys.
C00017 00006	1.12	The Extended Command Scanner.
C00019 00007	1.13	The Stack.
C00023 00008	1.16	Making a Cube Explicitly.
C00027 00009	1.18	Text Commands of GEOMED 1973.
C00031 00010	~I0,0P7λ13FA
C00033 00011	2.3	Soma Cubes
C00035 00012	2.4	The Platonic Solids.
C00037 00013	2.5	A Knot.
C00039 00014	2.8	The Pulgas Water Temple.
C00041 00015	2.9	Cross-Eyed Stereo Pairs.
C00043 00016	2.10	Video Synthesis.
C00044 00017	~λ13P14JUFA
C00046 00018	~I0,0λ13FA
C00049 00019	3.1	EUCLIDEAN TRANSFORMATIONS.
C00053 00020	3.2	STRENGTHS OF TRANSFORMATION.
C00056 00021	3.3	EUCLIDEAN SWITCHES.
C00060 00022	~JAFA
C00064 ENDMK
C⊗;
~I0,0;λ10;JL;FA
STANFORD ARTIFICIAL INTELLIGENCE LABORATORY             ~JRF.APRIL 1974
~JLFAOPERATING NOTE 68.2	               ~JRF.GEOMED DOCUMENTATION
~JLFAMEMO AIM-232
~JLFACOMPUTER SCIENCE DEPARTMENT REPORT NO. CS-414
~L0,400;JCFB GEOMED  -  A GEOMETRIC EDITOR.
~L0,300;JCFB Bruce  g.  Baumgart
~L0,0;JA;FA
ABSTRACT: 

~JUFA	GEOMED is  a system  for doing  3-D geometric modeling;  used
from  a keyboard,  it is  an interactive drawing  program; used  as a
package of  SAIL or  LISP accessible  subroutines, it  is a  graphics
language. With GEOMED,  arbitrary  polyhedra can be contructed; moved
about  and viewed  in perspective with  hidden lines  eliminated.  In
addition to polyhedra; camera  and image models are provided  so that
simulators  relevant  to  computer  vision,  problem  solving,    and
animation may be constructed. 

~L0,-650;JUFA
	This research was supported in part  by the Advanced Research
Projects  Agency of  the  Office of  the Secretary  of  Defense under
Contract DAHC15-73-C-0435.  The views  and conclusions  contained  in
this document are  those of the author and should  not be interpreted
as  necessarily representing the official policies,  either expressed
or implied,  of the  Advanced Research Projects Agency or  the United
States Government.
~I0,0;λ15;FA

~JC;FBCONTENTS.

~JCFBGEOMED AS AN INTERACTIVE DRAWING PROGRAM.
~JA;FB

	1.0	PRIMER.
	2.0	EXAMPLES.
	3.0	GEOMETRIC COMMANDS.
	4.0	TOPOLOGICAL COMMANDS.
	5.0	INPUT/OUTPUT COMMANDS.
	6.0	EDITOR CONTROL COMMANDS.
	7.0	DISPLAY CONTROL COMMANDS.
 	8.0	COMMAND SUMMARY BY LEXICAL ORDER.
~H2;X1.2;L0,-400;*ARM.PLT;FA
~I0,0;P1;λ13;FA
~JC;FA SECTION 1

~JC;FBPRIMER
~JU;FA
1.1	Purpose.

	GEOMED is for  making drawings,  synthetic video  images, and
3-D geometric models for the sake of computer vision.

1.2	Running GEOMED.

	The system  copy of GEOMED  is started  by typing "R  GEOMED"
carriage  return  at  a CRT  display  console  (rather  than at a video
console). The program will display a rectangle,  type an asterisk and
await single  character commands. Typing additional  carriage returns
will yield more asterisks showing that GEOMED is alive and listening.

1.3	Instant Cube.

	Typing the character  "∞", calls a  macro that makes  a cube.
Adjust the pots on the display console so that the cube looks right.

1.4	Translation.
~JA;λ5;F.
	   Type the character ":" to move the cube right  (positive x axis).
	   Type the character ";" to move the cube left   (negative x axis).
	   Type the character ")" to move the cube up     (positive y axis).
	   Type the character "(" to move the cube down   (negative y axis).
	   Type the character "*" to move the cube nearer (positive z axis).
	   Type the character "-" to move the cube away   (negative z axis).
~JU;λ13;F.
	Clearly  these command  characters  are not  mnemonics,  they
were  chosen  because  they  do  not  require  the  TOP key  and  are
conveniently grouped in pairs under one's right hand.

1.5	Strength of Translation.

	The distance the cube is moved on  each command is called the
strength  of translation or TDEL.  The value of TDEL  is displayed in
the upper right corner of the  screen and is initially one foot.  The
strength of translation is halved by typing the command character "/"
or doubled by typing "\".

1.6	World Frame of Reference.

	The direction the  cube moved was  with respect to  the world
frame  of reference which is  a right handed coordinate  system.  The
initial camera is  positioned looking down  the Z  axis towards the  world
origin. The  world origin is  in the center  of the display  screen a
simulated sixteen feet away; and the positive world X axis is to your
right; and the positive world Y axis is upwards.
1.7	Control, Meta, and Meta-Control Keys.

	Notice that the Stanford A.I. keyboard  has four "shift" keys
labeled SHIFT, TOP,  META & CONTROL. SHIFT only determines whether an
alphabetic letter is upper or lower case; GEOMED converts lower case
letters into upper so  that the SHIFT key has no  effect. The TOP key
allows  two ASCII character  codes to  be on each  physical key; this
doubling up on  the physical  keys is not  important to GEOMED  since
"TOP-E"  can always  be  referred to  as  "@".   Finally,   of  great
importance, the CONTROL and META keys add two extra bits to the 7-bit
ASCII code,  so that  a 9-bit character is formed.   In this document
the characters "α",  "β" and "ε" will be used as prefix abbreviations
for  CONTROL,    META   and  META-CONTROL  keying  of  a   character.
Furthermore,   the command scanner  accepts the characters "α",   "β"
and "ε" as prefix modifiers that will add the appropriate control and
meta bits to the next character typed.

1.8	Question Mark "?" Prefix.

	Typing  the  question  mark  character  "?"  followed  by  any
character will type a one line reminder  of what commands are invoked
by that character.

1.9	Rotation.

	The  rotation  command  characters  are  the  same   as   for
translation  except  you must hold the CONTROL key down or prefix the
command with an "α". Try rotating the instant cube about  the  X-axis
with  "α:".  The positive direction of rotation is counter-clockwise.
The negative direction of rotation is clockwise.

1.10	Strength of Rotation.

	The strength of rotation is named RDEL.  The value of RDEL is
displayed  in  two formats  in the  upper  right hand  corner  of the
screen: as a  pi fraction and in  degrees,  minutes,   seconds.   The
initial value of RDEL is π/4,  45 degrees.  Analogous to translation,
the  strength  of rotation  is  halved or  doubled by  "α/"  and "α\"
respectively.

1.11	Rotation Default.

	Since a sequence of rotations is quite common, there is a way
to  make the CTRL key  be sticky. The  usual Euclidean transformation
default is translation world frame; but after typing the  "@" command
character, the Euclidean default is rotation world frame. Translation
default  is  restored by  typing  "!".   The state  of  the Euclidean
transformation default is also  displayed in the status in  the upper
right hand corner of the screen. (The "≡" command disables the status
display; "≡" toggles).
1.12	The Extended Command Scanner.

	The X-commands are executed  by typing "X" followed by  the first
three letters of a mnemonic (further letters are ignored) followed by
any necessary arguments.  The command is terminated by a  RETURN. The
arguments  may  be separated  by  any  reasonable delimiters:  space,
comma,   etc.  The following three "X" commands provide easy creation
of simple polyhedra:

	X CUBE <DX width>,<DY height>,<DZ depth>
	X BALL <radius>,<M longitudes>,<N latitudes>
	X CYLN <radius>,<N sides>,<DZ length>

	The CUBE command  makes a right rectangular prism  with width,
height and depth  as given.  The BALL command makes a polyhedron that
approximates a  sphere. The  CYLN command  makes a  right prism  that
approximates a circular cylinder.

~L0,-250;H2;X1.2;*FIG1;X1.0;F.
1.13	The Stack.

	GEOMED commands  take their  arguments from  and leave  their
results in a push  down stack of bodies,  faces,  edges and vertices.
The contents of the stack are displayed on the left hand side  of the
display screen.  Every kind of  node has a default  print identifier,
for the first body created a `B1' is displayed in the stack. Making a
second cube will push a  `B2' into the stack. To retrieve `B1'  use the
"↑" stack pop command or the "α↑" stack rotate up  or "α↓" stack rotate down
or "↔" the swap top of stack command. The "↓" command pushs the stack
down and places in the new top the entity  that was previously top of stack.

1.14	The Face, Edge and Vertex Rings.

	A polyhedron consists  of three circular double  linked lists
(called rings); there is  a ring of faces, a ring of edges and a ring
of vertices. The head of each ring is the body node. The rings can be
traveled by  using the commands "<"  and ">" to go  forwards and back
through the face ring, the commands "≤" and  "≥" for the edge ring, and
the commands  "∨" and "∧"  for the  vertex ring.  Notice that when  a
face,  edge  or  vertex  node   is  in  the  top  of  the  stack  the
corresponding entity is intensified in the drawing. 

1.15	Hidden Line Elimination.

	Typing ALT-MODE causes your drawing  to be displayed with its
hidden lines eliminated;
as is illustrated by the two pictures of a log cabin in the woods.
To stay in hidden line display mode use the
"_" underbar command;  the "β_" returns the  display mode default  to
display all the lines. The hidden line eliminator, named OCCULT, does
not display concave faces correctly; and  for the
sake of  speed it  does not  check for them. The  faces of  a
polyhedra can be forced convex  by applying the "$" command to a body
or to a face.

~X0.60;
H1;L-315,-575;*HIDE1.PLT;
H2;L315,-575;*HIDE2.PLT;X1.0;F.
1.16	Making a Cube Explicitly.

	After "∞" and  "X CUBE", a third way  to draw a cube  will be
given to illustrate  the primitive topology commands. Starting with a
fresh copy of GEOMED,  type the command letters in the  second column
to get the advertised results:
~λ5;JA;F.
	1.	V	Vertex body creation.
	2.	:)	Position the vertex into the first quadrant.
	3.	S;;	Make an edge and vertex and move left.
	4.	S((	Edge vertex down.
	5.	S::	Edge vertex right.
	6.	J↑	Join the first and last vertices of the wire.
	7.	*	Pull the face lamina towards you.
	8.	S	Sweep the square face into a very thin solid.
	9.	--↑	Move the face away from you giving the cube depth.
	10.	@/):!	Rotate the cube to a more familiar position.
~λ15;JU;F.

	Three commands  that  have not  been mentioned  yet are:  "V"
vertex body creation,  "S" sweep and "J" join two vertices with a new
edge. The "V" command takes no arguments and pushs a  new body,
face and  vertex into  the stack.   This degenerate  point polyhedron
satisfies  the Euler equation F-E+V=2 (1-0+1=2)  and is always placed
at the world origin.  The first three sweep  commands in the example
sweep  a vertex polyhedron  into a  wire polyhedron  by adding  a new
vertex and a new edge (incidentally preserving Euler's equation as do
all GEOMED  commands).  The  wire-sweep takes  a vertex argument
from the stack,  and returns  the new vertex to the stack.
The new vertex  has the same  locus as the
argument vertex. After three sides of a square have been formed,  the
"J" command creates a  new face and a new edge  between the first and
last vertex  of the wire face.  The wire-join case of the "J" command
takes a vertex argument  and identifies it as  the end of a  wire and
knows  enough to  fetch the  other end  of that  wire, as  its second
argument.



1.17	Making a Solid of Rotation.



	A solid  of rotation  can be  made by  sweeping a  wire  face
around and closing it  with the "R" command. For example  a dumbbell
shaped object is formed by typing the following commands:~λ5;JA;F.
	1.	V(((((:			Get Vertex  to starting position.
	2.	S:)S)S;)S)))) 	Lower bell.
	3.	S:)S)S;)↑ 		Upper Bell.
	4.	7@S(R!↑  		Rotate wire about  Y-axis and complete solid.
~λ15;JU;L375,500;*CUBE.PLT;L250,-300;*DUMBEL.PLT;F.
1.18	Text Commands of GEOMED 1973.

	Towards the end  of 1973, text  nodes and text  commands were
added  to GEOMED  to demonstrate its  potential value  for mechanical
drawing.   This work  was  done  by Tovar  Mock,   and  the
resulting alternate version  of GEOMED is available on  the system as
the program named "G".

	Text  nodes are  created  (or edited)  by  applying the  "T"
command  with a vertex in  the top of  stack.
The header of a text node list is called  a Y-node
and can be reached from a text node by the "≤" command; Y-nodes carry
their  own  3-D space  locus  and so  can  be moved  about  using the
Euclidean transformation. The resulting data structures can only be
saved and restored by means  of the "εO" and "εI" commands, which 
dump and restore D3D files. The D3D format 
I/O doesn't exist in  present GEOMED. The  "T"
command accepts text by  means of an editor resembling  the system's
editors  TV  and E,  which use the  system line  edit  commands. The
particular line edit mode commands of G are:

	<CR>	Forward 1 line
	<VT>	Backward 1 line

	αε>	Forward 4 lines
	αε<	Backward 4 lines
	αε≥	Forward 16 lines
	αε≤	Backward 16 lines

	εD	Delete a line
	εI	Enter line insert mode
	αZ	Concatenate next line with current line

	αεE	Return to GEOMED
	αεV	Update display
	αε/	Shrink character size.
	αε\	Expand character size.

	The best way to get a labeled drawing into hardcopy is to "P"
plot it out of  G into a plot file, ".PLT"; and then to use PLTVEC to
output the drawing on  the Calcomp Plotter or  to use XAP to  output
the drawing to the XGP, Xerox Graphics Printer. See section 5.2,
for details on how to make hardcopy drawings.
~I0,0;P7;λ13;FA
~JC;FA SECTION 2

~JC;FBEXAMPLES
~JU;FA
	The  examples can  be  used as  exercises  in two  ways:  the
energetic reader  can glance at the figures  and attempt to reproduce
the results on his own; the  casual reader can copy the answers  into
the computer and follow the action a  step at a time. In either event,
one should look at sections 3 through  7 for
commands that have not yet been explained.
~JAF.


2.1	Jack.

	XCUB 2 2 2
	\\FF >S* >S* >S* >S* >S* >S* B





2.2.1	Torus.

	V:@		First Vertex.
	S*S*S*	Seven more vertices.
	S*S*S*S*
	J↑		Form Lamina.
	!\\:		Position the lamina.
	@S)S)S)S)	Sweep the face around the Y-axis.
	S)S)S)S)
	↓>G↑		Glue the ends of the torus together.




2.2.2	Torus using iterated sweeps.

	V:7@S*J	Make lamina.
	!↑8/:\@S)	Sweep lamina into ring.
	↓>G↑!		Glue the ends.

~H2;
L315, 350;X0.5;*JACK.PLT;
L315, -100;X0.5;*TORUS.PLT;
L315,-550;X0.5;*TORUS.PLT;
F.
2.3	Soma Cubes

~JUF.	An introduction to both Soma Cubes and the Platonic solids can
be found in Martin Gardner's Second Book of Mathematical Puzzles and Diversions,
Simon and Schuster, New York, 1961. The objects are shown rotationally displaced
from the position in which they are constructed. If you do one object after another,
then the "FF" should not be repeated.

~JA;X0.7;F.

			FFXCUB 1 1 1				~*SOMA1.PLT;F.
			>S*>>S*BNSOMA1



			FFXCUB 1 1 1				~*SOMA2.PLT;F.
			>S*S*>>S*BNSOMA2



			FFXCUB 1 1 1				~*SOMA3.PLT;F.
			>S* >S* >S*BNSOMA3



			FFXCUB 1 1 1				~*SOMA4.PLT;F.
			<S* <S*↓≥.+↑ S*BNSOMA4



			FFXCUB 1 1 1				~*SOMA5.PLT;F.
			>>S*>>>>S*↓≥.+↑S*BNSOMA5



			FFXCUB 1 1 1				~*SOMA6.PLT;F.
			>>S*>>>>S*↓≥.+↑S*ε;¬BNSOMA6



			FFXCUB 1 1 1				~*SOMA7.PLT;F.
			<S*<<<S*<S*BNSOMA7
2.4	The Platonic Solids.

Regular Tetrahedron, edge length of SQRT(2).

	XCUB 1 1 1
	∧↓∧∧↓B ∨↓∨∨		Push opposing vertices into the stack,
	SK↑SK↑SK↑KB		Lop off the opposing vertices.

Another Regular Tetrahedron, edge length of SQRT(3).

	XCYL 6 3 6*1.414		Three sided cylinder
	>KB				Pyramid one of the ends.

Regular Hexahedron, edge length of 1.

	XCUB 1 1 1		Very easy.

Regular Octahedron, edge length of SQRT(1/2).

	XCUB 1 1 1
	βD			Face-Vertex Dual of a cube

Regular Icosahedron, edge length of 6*SIN(π/5).

	Xcyl 3 5 0		Pentagonal lamina
	λ.507*3		
	>*XPRISM		Prismoid face sweep
	--ππ/5
	α*λ.618*3		Reciprocal of golden mean.
	↓>αs*↑αs-B

Regular Dodecahedron, edge length of 6/PHI.
	(after Euclid's classical construction:
	   Elements, Book XIII, Proposition 17).

	XCUB 6 6 6	Start with a cibe.
	β5λ3		Midpoint DDEL, Mid edge TDEL.
	≥≥S:↔B≤≤≤≤≤	Edge swweps to midface.
	S:↔≤S(↔↓M↔	
	≤≤↓M↔≤≤S)α↑
	↓M↔≤Mα↑Jβ↔J	Join the two pairs of midpoints
	%61.8034		Reciprocal of the golden mean, PHI.
	λ0.309017*6		SQRT(PHI↑2 - 1/4 - (1-PHI/2)↑2)
	β;)↑β-;↑β(-↑	Shrink and translate the six new edges.
	β(*↑β-:↑β;(B

~H0;
L-315,600;*P1.PLT;
L315,300;*P2.PLT;
L-315,000;*P3.PLT;
L315,-300;*P4.PLT;
L-315,-600;*P5.PLT;FA
2.5	A Knot.

	The knot was developed by visualizing
the connection of three non-parallel and non-coplanar
edges of a cube, as in the second knot figure.

	XCYL 1 8 6			Straight section.
	λ6
	Q;/->>λ1
	Sα))Sα))Sα))		Three quarters of a turn.
	Sα))Sα))Sα))Bλ3
	*:(@9C			Symetry on a cube
	:-C-(!
	>↓>α↓				Fetch three pairs of faces.
	>↓>α↓
	>↓>α↓
	G↑G↑G			Glue the pairs of faces.




2.6	An Odd Shaped Block  (illustrating kill commands).

	XCUB 3 2 1
	%100/3
	≥↓≥≥
	M↔↓>↔M
	E(E:↔↑J<S*B
	≥↓≥↓↓∨..
	↔K↑
	↔K↑K↑↓∨↔K↑KB
	αV12
	SKB$


2.7	Yet Another Torus.
	
	V\:ππ/9
	9@S*!/S;S)))
	S::::::S(((J↑
	-S**>>↓>>>>9@S*!
	G↑$

~H2;
H2;X0.5;L+340,600;*KNOT1.PLT;
H0;X0.5;L+340,200;*KNOT2.PLT;
H2;X0.5;L+340,-200;*BLK1.PLT;
H2;X0.5;L+340,-600;*BLK2.PLT;F.
2.8	The Pulgas Water Temple.

~JU;F.	Ten miles north of Stanford,
the Pulgas Water Temple marks the termination of an
aqueduct that brings water from the Sierra Nevada to San Francisco.
This example illustrates how a complicated object is built up of simple polyhedra.
~JA;F.

Base of Temple.
	V:λ5			Foundation of temple.
	S:λ0.2
	S)S;;S)S;;S)Sλ3	Jaggies forming steps.
	;↑π40`			Set RDEL to 40 degrees.
	8@S)R↑¬λ3.61	Sweep out a solid of rotation.
	!(

Top of Temple.
	!Vλ0.6
	:S)))S;;S(((J		Make rectangular lamina
	↑λ3.5
	:π40`
	9@S)↓>G↑/)		Sweep lamina.
	!λ2.72
	)

Columns of Temple.
	XCYL 0.5 9 6	Make first column,
	@9:!λ3.5		position column.
	>Aβ9β(<:π20`	Taper the top of the column.
	Q@)\
	C)C)C)C)		Make eight copies of the column,
	C)C)C)C)

~X0.4;H0;
L350,550;*PULGA1.PLT;
L350,200;*PULGA2.PLT;
L350,-150;*PULGA3.PLT;
H2;X0.6;L0,-615;*PULGA5.PLT;JU;FA
2.9	Cross-Eyed Stereo Pairs.

	Models may  be  viewed as  a  stereo  pair  by  creating  an
additional camera and  display window; this is done automatically
by using  the "β∞"  macro. Although  stereo pair prisms  are
available and  can be  used to  view the  display screen,  the stereo
macro  command swaps the usual left  and right images so that the
depth  may  be seen  by  looking  at  the  screen  cross-eyed  as  is
illustrated by the Siamese cat  below. That is in order to see stereo
depth, look  at the  display cross-eyed  so that  you can  see
three windows;  next, concentrate on  focusing on the  middle window.
With practice the  displayed objects can be seen in depth at a glance
with no  special equipment,  which  is a  great help  in  positioning
things.

~H2;
L0,290;X0.6;*CAT.PLT;
L0,-250;X1.0;*STEREO.PLT;
L0,-700;X1.0;*STERE2.PLT;FA
2.10	Video Synthesis.

	The "βO" command will do a hidden line elimination and output
a 2-D vector  based image format, V2D file, which in turn is suitable
input to  a  program called  MKVID. MKVID creates, shades,  colors,
and dejaggies television pictures. The only  online video hardcopy device
is  the Xerox Graphics  Printer. A  quick, but low  quality XGP video
image (such as the one below of the star ship Enterprise) is obtained
by typing "R XIP;L0,0;*<FILENAME>" or "R XAP;L0,0;*<FILENAME>" to the
monitor. XIP and XAP are  underground Xerox formatting programs.

~L0,0;*SHIP.VID;FA
~λ13;P14;JUFA
2.11	Video Derived Polyhedra.

~JU;FA	One way to make a polyhedron from a video image is to
sweep  the silhouette  of  an intensity  contour from the program
CRE  (a video
contouring program). The  CRE commands "T" for  take, "C" for  contour
and "αO" for  output contoured image will yield a  disk file suitable
for  input to GEOMED.  Using GEOMED  commands: "βI" will  input a CRE
file and create a face, edge, vertex data structure on the now camera
node that corresponds to the contoured image;
~JA;FA
	0.	TC10αOHAND.CRE		CRE Commands to take, contour and output.
	1.	βIHAND.CRE			GEOMED input from CRE file.
	2.	αC...				Locate a suitable contour body node.
	3.	XSIL <ZMIN> <ZMAX>	Sweep out silhouette polyhedron.

~L0,-200;JUFA
	The CRE program is documented in Stanford A.I. Memo #199, titled
`Image Contouring and Comparing', by Baumgart.
A more elaborate example of video assisted drawing is  demonstrated by
the water pump below; the shape of the base and the holes in the
base were derived from a video image.

~L0,75;H2;X0.6;*HAND.PLT;
L0,-600;H2;X0.6;*PUMP.PLT;
FA
~I0,0;λ13;FA
~JC;FA SECTION 3

~JC;FBGEOMETRIC COMMANDS
~JAFA
   3.1	EUCLIDEAN TRANSFORMATION KEYS.

		Translation, α Rotation,  β Dilation, ε Reflection.
		";" Transform Minus X-Axis.	":" ...Plus X-Axis.	
		"(" Transform Minus Y-Axis.	")" ...Plus Y-Axis.	
		"-" Transform Minus Z-Axis.	"*" ...Plus Z-Axis.	
		"!" Translation Default.      "@" Rotation Default.

   3.2	STRENGTHS OF TRANSFORMATION.

	      3.2.1	"/"	Halve a Transformation Strength.
			"\"	Double a Transformation Strength.
	      3.2.2  "λ<expr>"	Set Translation Strength, TDEL.
		     "π<expr>"	Set Rotation Strength, RDEL.
		     "%<expr>"	Set Dilation Strength, DDEL.
	      3.2.3  "<digit>"	Set Transform Strength Immediate.

   3.3	EUCLIDEAN SWITCHES.

	      3.3.1	 "F"	Step Frame Switch Forwards.
			"βF"	Step Frame Switch Backwards.
	      3.3.2	 "Q"	Toggle Frame Origin Switch.
	      3.3.3	"βA"	Step Axis Counter.
	      3.3.4	 "∀"	Enable All Body Motions.
			"α∀"	Disable Frame  Motion.
			"β∀"	Disable Vertex Motion.
			"ε∀"	Disable Parts  Motion.

   3.4	THE ITERATION COUNTER.

		"<digit>"	Accumulate Iteration Count.
		"<return>"	Reset Iteration Count to Zero.

   3.5	DIRECT EUCLIDEAN COMMANDS.

	      3.5.1	"U"	Unmove a Body.
	      3.5.2	"X PLACE <X> <Y> <Z>"
	      3.5.3	"X ORIENT <PAN> <TILT> <SWING>"
3.1	EUCLIDEAN TRANSFORMATIONS.
~JA;FA
	Translation, α Rotation,  β Dilation, ε Reflection.
	";" Transform Minus X-Axis.	":" ...Plus X-Axis.	
	"(" Transform Minus Y-Axis.	")" ...Plus Y-Axis.	
	"-" Transform Minus Z-Axis.	"*" ...Plus Z-Axis.	
	"!" Translation Default.      "@" Rotation Default.

~JUFA	The  Euclidean  geometric  transformations  are  translation,
rotation, dilation and reflection. The entity in the top of the stack
is transformed by typing one of the six characters: colon, semicolon,
left parenthesis,   right parenthesis,  minus sign or  asterisk.  The
characters  colon,   left  parenthesis and  minus sign  transform the
object in the  negative direction  with respect to  the X, the Y,
and  the Z axes respectively. The  characters semicolon, right
parenthesis  and  asterisk  transform  the  object  in  the  positive
direction with  respect  to the  X, the  Y, and the  Z axes
respectively. The particular transformation is selected by keying the
control  bits:  none,     control,    meta  and  meta-control   which
respectively select  translation, rotation, dilation  and reflection.
Finally, the no-control-bits case can be forced to be rotation by the
"@" rotation default command,  or translation by  the "!" translation
default command.

	Translation  moves  the  top  entity  in  the  stack  in  the
direction specified  by  one  unit  of  translation  strength,  TDEL.
Rotation rotates the entity  about the axis specified by  one unit of
rotational  strength, RDEL. Positive rotations  are counter clockwise
and negative  rotations are  clockwise.

	Dilations  and  reflections  refer  to  a  three  axis  count
selector.  State 1  causes dilation  (reflection) to  be done  on the
specified axis,  dilation state 2 causes dilation (reflection) on the
two axes not indicated,  and  state 3 causes dilation (relfection) on
all the axes. The axis count selector is advanced by typing "βA". The
state of the selector is displayed as a digit 1,  2  or 3 just to the
right of the  dilation strength's per cent sign  in the editor status
in the upper right of the display screen.

	When the  dilation  strength,  DDEL,  is  less  than  100%  a
positive dilation  will scale  the entity  by 1/DDEL  and a  negative
dilation will scale the entity by DDEL. Positive and negative keyings
make no difference in the execution of a reflection.
3.2	STRENGTHS OF TRANSFORMATION.

3.2.1   "/"     Halve a Transformation Strength.
        "\"     Double a Transformation Strength.

	The strength of  a Euclidean transformation can be  halved or
doubled by keying  the transform's control bits and by striking slash
or back slash respectively.

~JAFA
3.2.2	"λ<real expression>"	Set Translation Strength, TDEL.
 	"π<real expression>"	Set Rotation Strength, RDEL.
 	"%<real expression>"	Set Dilation Strength, DDEL.

~JUFA	The strengths of the Euclidean transformations can be entered
numerically  by typing  "λ",  "π" or  "%" followed  by  an arithmetic
expression of numerical constants. The simple expression  scanner can
take  "+", "-",  "*", "/"  and  parenthesis in  the usual  precedence
order;  the  scanner  also  evaluates  the  pi  character,  "π",   to
3.1415927; numbers suffixed with  the inch mark double quote  (") are
divided by twelve;  numbers suffixed with a left single quote (`) are
multiplied  by  1.745329E-2  which  converts  degrees  into radians.

3.2.3	"<digits>"	Set Transform Strength Immediate.

	The strength  of  a Euclidean  transformation can  be set  by
keying the Transform's control bits and by striking a digit from zero
to nine. Keying "ε<digit>" sets the strength of translation;  a digit
without meta-control  bits contributes to  the iteration count.   For
Translation: "ε0"  sets TDEL to 1/16 of a foot, "ε4" sets TDEL to one
Foot,  and "ε9" sets TDEL to 32 Feet.  That is, ε<digit> sets TDEL to
2.0↑(<digit>-4) feet.  For Rotation: "α9" sets RDEL to π/2, "α8" sets
RDEL to π/4, and so  on by halves.
For Dilation: "β1" sets  DDEL to 10%,   "β2"
sets DDEL to 20% and so on.
3.3	EUCLIDEAN SWITCHES.
~JAFA
3.3.1	 "F"	Step frame switch forwards.
 	"βF"	Step frame switch backwards.

~JUFA	There are four frames of reference:  world frame, body frame,
relative frame and camera frame. The world frame is that in which all
coordinates are stored; the world  frame is the natural direct  frame
of reference,   all the other  frames being represented in  world frame
coordinates  by a frame  node which contains the  origin location and
axes orientation of secondary  frames.  In particular, each  body and
camera has a frame node,  which determine a camera or a body frame of
reference that translates and rotates when Euclidean  transformations
are applied  to that  body or camera.  The relative  frame mode is  a
catch all; when a body is in the top of the stack, its relative frame
is that of the body of which it is a part; when a face is  in the top
of the stack, its relative frame  is a special face frame with Z-axis
parallel to the face's outward pointing normal. The "F" command steps
the frame  switch selector  forwards,   "βF" steps  the frame  switch
selector  backwards.   The  state  of the  frame  switch selector  is
displayed in the status in the upper right of the display screen.

3.3.2	"Q"	Toggle Frame Origin Switch.

	Euclidean transformations  in world  frame can  be done  with
repect to  the world origin or with repect to  the origin of the entity
being transformed depending on  the state of  the FRMORG switch.   In
particular, FRMORG affects world  frame rotations: FRMORG true causes
rotation  about  a world  axis thru  the  world origin;  FRMORG false
causes rotation about an axis parallel to a world  axis,  but passing
thru  the body  origin.   The  FRMORG switch  is flipped  by  the "Q"
command. The state  of FRMORG is  indicated by an  asterisk in  the
status display;  the  asterisk is  present when  FRMORG  is true  and
absent when FRMORG is false.

3.3.3	"βA"	Step Axis Counter.

	The three-state switch  named AXECNT  affects dilations  and
reflections.   State #1  indicates dilation  (reflection) only  on the
specified axis. State #2  indicates dilation  (reflection) on the  two
axes not  specified. State #3  indicates dilation (reflection)  on all
three axes. The state of the AXECNT switch is indicated by a digit to
the right  of  the dilation  strength's percent  sign  in the  status
display. AXECNT is cycled forward by the "βA" command.
~JAFA
3.3.4	  "∀"	Enable All Body Motions.
 	 "α∀"	Disable Frame  Motion.
 	 "β∀"	Disable Vertex Motion.
 	 "ε∀"	Disable Parts  Motion.

~JUFA	Applying a Euclidean transformation to  a body means applying
the tranform  to the vertices, frame and parts  of that body. Each of
these  three  phases  of  body  transformation  can  be  individually
disabled  by the  "∀"  command with  the  appropriate combination  of
meta-control bits.   With no meta-control bits, the "∀" command resets
all the body disable bits. Transforming a fully disabled  body is a
no-operation.

~JAFA
3.4	THE ITERATION COUNTER.

 	"<digit>"	Accumulate Iteration Count.
 	"<return>"	Reset Iteration Count to Zero.

~JUFA	Digits typed  without control  keys are  accumulated into  an
iteration  counter.   The iteration  count is  cleared by  typing a
carriage  return.    The  count  applies   to  Euclidean
transformations and sweeps. The ability  to iterate and
to  do macros  is not  developed because  of the existence  of GEOMED
imbedded  in  LISP  which  provides  better  interactive  programming
facilities than  would be possible  under the present character command
scanner. (It is my design philosophy
that interactive geometric editing can in fact be kept distinct from interactive
programming).


3.5	DIRECT EUCLIDEAN COMMANDS.

3.5.1	"U"	Unmove a Body.

	This command applies the inverse of the given body's frame of
reference  to the body  itself.  This  has the effect  of undoing any
translations and rotations that have  been applied to the body;  that
is the body's  frame is brought back to be  coincident with the world
frame  of reference. Thus a  polyhedral body can  be constructed in a
standard orientation; then rotated randomly for  inspection; and then
be brought back to its original orientation for further editing.

3.5.2	"X PLACE <X> <Y> <Z>"

	The location of the body, camera or vertex  in the top of the
stack is placed at the given world coordinates.

3.5.3	"X ORIENT <pan> <tilt> <swing>"

	The orientation  of the given  body or camera  is set  to the
specified values.